package com.beiding.jsonanalyzer.analyze.func;

import com.beiding.jsonanalyzer.flow.ValueNode;

/**
 * 函数实例
 * 本身是有状态的
 * 因此不能在多个分支中共享使用
 * @author 丁常磊
 * @date 2022/5/26 17:13
 */

public interface FuncBase<T> {

    /**
     * 检查是否聚合
     *
     * @return
     */
    boolean checkAgg();

    /**
     * 对于非聚合的直接执行产生一个结果
     *
     * @param valueNode
     * @return
     */
    T executeOne(ValueNode valueNode);

    /**
     * 对于聚合的
     * 放入每个需要被聚合的对象
     * @param valueNode
     */
    void pugAgg(ValueNode valueNode);

    /**
     * 重置聚合
     * 在流开始前操作,以便初始化
     */
    void resetAgg();

    /**
     * 获取聚合结果
     * @return
     */
    T aggGet();

}
